/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Tokenizer;

import java.io.File;
import java.util.AbstractList;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

/**
 *
 * @author Raito
 */
public class Token implements IToken {

    String m_question;
    DataTokenizer dataTokenizer;

    public Token(String question) {
        m_question = question;
        dataTokenizer = new DataTokenizer();
    }

    @Override
    public void InitData() {
        String nodeValue = "";
        try {

            File file = new File("Vocabulary/vocabulary.xml");
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            Document doc = db.parse(file);
            doc.getDocumentElement().normalize();
            NodeList nodeList = doc.getElementsByTagName("item");
            for (int s = 0; s < nodeList.getLength(); s++) {
                Node fstNode = nodeList.item(s);
                if (fstNode.getNodeType() == Node.ELEMENT_NODE) {
                    nodeValue = fstNode.getChildNodes().item(0).getNodeValue();
                    dataTokenizer.Insert(nodeValue.substring(0, 1), nodeValue);
                }
            }

        } catch (Exception ex) {
        }
    }
    
    private boolean checkExisṭ(String token,List<String> data)
    {
        for (String str:data) {
            if (token.equals(str)){
                return true;
            }
        }
        return false;
        
    }

    @Override
    public List<String> Tokenizer() {
        InitData();
        boolean flag = false;
        String token = "";
        List<String> data = new ArrayList<String>();
        String firstCharacter;
        String oldToken = "";
        List<String> result = new ArrayList<String>();
        String[] arrayData = m_question.split(" ");
        for (int i = 0; i < arrayData.length; i++) {
            token = arrayData[i];
            firstCharacter = token.substring(0, 1);
            oldToken = token;
            for (int j = i + 1; j < arrayData.length; j++) {
                data = dataTokenizer.Get(firstCharacter);
                boolean contains = false;
                if(data != null)
                {
                   contains = checkExisṭ(token, data);                
                }
                
                if (contains)
                {
                    i = j-1;
                    oldToken = token;                    
                }
                token += "_" + arrayData[j];
                
            }
            result.add(oldToken);
        }
//        do {
//            if (!flag) {
//                firstCharacter = arrayData[i].substring(0, 1);
//                data = dataTokenizer.Get(firstCharacter);
//                token = arrayData[i];
//                oldToken = token;
//            }
//
//            i++;
//
//            if (data.isEmpty()) {
//                result.add(token);
//            } else {
//                if (data.contains(token)) {
//                    oldToken = token;
//                    if (i < arrayData.length) {
//                        token = token + "_" + arrayData[i];
//                    } else {
//                        result.add(oldToken);
//                    }
//                    flag = true;
//                } else {
//                    result.add(oldToken);
//                    if (flag == true) {
//                        i--;
//                        flag = false;
//                    }
//                }
//            }
//
//        } while (i < arrayData.length);
        return result;
    }
}
